home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / LIBRARY / PAS_0693 / STATKEYS.PAS < prev    next >
Pascal/Delphi Source File  |  1993-06-30  |  4KB  |  100 lines

  1. {─ Fido Pascal Conference ────────────────────────────────────────────── PASCAL ─
  2. Msg  : 311 of 374                                                               
  3. From : Trisdaresa Sumarjoso                1:272/38.0           29 May 93  01:49 
  4. To   : Eric Anderson                                                             
  5. Subj : READING SHIFT KEY?                                                     
  6. ────────────────────────────────────────────────────────────────────────────────
  7.  -=> Quoting Eric Anderson to David Sacerdote <=-
  8.  
  9.  DS> To obtain a shift status, you put a 2 in the AH register, and
  10.  DS> call interrupt 16 hex.  The results are returned in the AL
  11.  DS> register as follows:
  12.  DS> Bit     Meaning
  13.  DS> 1       Right Shift is down
  14.  DS> 2       Left Shift is down
  15.  DS> 3       Control is down
  16.  DS> 4       Alt is down
  17.  DS> 5       Scroll lock   is down
  18.  DS> 6       Num Lock is down
  19.  DS> 7       Caps Lock is down
  20.  DS> 8       Insert is down
  21.  EA>
  22.  EA> i also found this usefull, one question though, do you know how to SET
  23.  EA> the status of the caps lock, scroll lock and numlock as well??
  24.  EA> Eric Anderson
  25.  
  26. Hello Eric...
  27.  
  28.         To set the status (turn it on?), you might have to access the
  29.         Bios variables directly (it's located at $40:$17).
  30.  
  31.         Here's a little code on how you could do it.}
  32.  
  33. Program TestStatKey;
  34.  
  35. Uses
  36.     Crt;
  37.  
  38. Const
  39.      Scroll_Lock        = 16;
  40.      Num_Lock           = 32;
  41.      Caps_Lock          = 64;
  42.      Insert             = 128;
  43.      Switch             : Array [0..1] Of String[3] = ('Off', 'On ');
  44.  
  45. Var
  46.    StatVar      : Byte Absolute $40:$17;
  47.  
  48. Procedure SetBiosVar( Stats: Byte);
  49. Begin
  50.      StatVar := StatVar Or Stats;
  51. End;
  52.  
  53. Procedure ReSetBiosVar( Stats: Byte);
  54. Begin
  55.      StatVar := StatVar And Not Stats;
  56. End;
  57.  
  58. Procedure GetStatus( Var Stats: Byte);
  59. Begin
  60.      Stats := StatVar;
  61. End;
  62.  
  63. Var
  64.    TestStat     : Byte;
  65.    Ch           : Char;
  66.  
  67. Begin
  68.      ClrScr;
  69.      Repeat
  70.            GetStatus(TestStat);
  71.            GotoXY(1,1);
  72.            WriteLn('(S)croll lock status : ', Switch[(TestStat And Scroll_Lock)
  73.                                                    Div Scroll_Lock]);
  74.            WriteLn('(N)um lock status : ', Switch[(TestStat And Num_Lock) Div
  75.                                                 Num_Lock]);
  76.            WriteLn('(C)aps lock status : ', Switch[(TestStat And Caps_Lock)
  77.                                                  Div Caps_Lock]);
  78.            WriteLn('(I)nsert status : ', Switch[(TestStat And Insert) Div
  79.                                               Insert]);
  80.            WriteLn( 'Press Upcase of the first letter to turn it on '+
  81.                     ' or Lowcase to turn it off');
  82.            WriteLn('Press <ENTER> to continue...');
  83.            Ch := ReadKey;
  84.            Case Ch Of
  85.                 'S'     : SetBiosVar(Scroll_Lock);
  86.                 's'     : ReSetBiosVar(Scroll_Lock);
  87.                 'N'     : SetBiosVar(Num_Lock);
  88.                 'n'     : ReSetBiosVar(Num_Lock);
  89.                 'C'     : SetBiosVar(Caps_Lock);
  90.                 'c'     : ReSetBiosVar(Caps_Lock);
  91.                 'I'     : SetBiosVar(Insert);
  92.                 'i'     : ReSetBiosVar(Insert);
  93.            End;
  94.      Until (Ch = #13);
  95. End.
  96.  
  97.         It's not commented (originally, it's for my personal testing
  98.         only), but the code shouldn't be too hard to understand (I
  99.         hope). If you need more explanation regarding above code, just
  100.         let me know. I'll try to clear it up for you.